/**
 * @file vision_pose.h
 * @brief 视觉定位与姿态矫正模块头文件
 * @author 视觉定位功能集成
 * @date 2024-07-06
 */

#ifndef VISION_POSE_H
#define VISION_POSE_H

#include <stdbool.h>

// 视觉数据结构体
typedef struct {
    int position;       // 二维码内容(1-9)
    float center_x;     // 二维码在图像中的中心X坐标(像素)
    float center_y;     // 二维码在图像中的中心Y坐标(像素)
    float angle;        // 二维码的旋转角度(度)
    float distance;     // 距离估计
    float skew;         // 倾斜度
} VisionPoseData;

// 姿态矫正阈值常量
#define X_THRESHOLD 30.0f      // X方向允许误差(像素)，从15.0放宽到30.0
#define Y_THRESHOLD 30.0f      // Y方向允许误差(像素)，从15.0放宽到30.0
#define ANGLE_THRESHOLD 10.0f   // 角度允许误差(度)，从5.0放宽到10.0

// 矫正参数
#define ADJUST_SPEED 0.018f    // 位置调整速度，从0.012f增加到0.018f
#define ADJUST_TIME_MS 200     // 每次调整时长(毫秒)，从120ms增加到200ms

// 函数声明
bool Vision_ParsePoseData(const char* data, VisionPoseData* poseData);
void Vision_ProcessPoseCorrection(const VisionPoseData* poseData);
bool Vision_IsAdjustmentNeeded(const VisionPoseData* poseData);
void Vision_AdjustCarPose(float x_offset, float y_offset, float angle_offset);

// 重置视觉处理状态，在小车完成一次动作后调用
void Vision_ResetProcessingState(void);

// 模块初始化
void Vision_Init(void);

#endif /* VISION_POSE_H */ 